import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 石方旭
 * Date: 2022-04-25
 * Time: 19:22
 */
class MyArray{
    private int[] elem;
    private int usedSize;
    public static final int DEFAULT_Size =4;
    public MyArray(){
        elem = new int[DEFAULT_Size];
        this.usedSize=0;
    }
    //2.打印数组中的元素
    public void disPlay() {
        for(int i =0;i<this.usedSize;++i) {
            System.out.print(this.elem[i]+" ");
        }
        System.out.println();
    }
    //检查是否满了，如果满了就要进行增容
    private Boolean isFull() {
        //数组元素满了需要增容
       return this.usedSize==this.elem.length;
    }

    //3.增加元素
    public void add(int key) {
        //如果满了就增容
        if(isFull()) {
            this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
        }
        //往数组中最后一个位置增加元素
        this.elem[usedSize]= key;
        this.usedSize++;
    }
    private void checkInAdd(int pos) throws CheckInAddException {
        if(pos<0||pos>this.usedSize) {
            throw new CheckInAddException("pos位置下标不合法");
        }
    }
    private Boolean isEmpty() {
       return this.usedSize==0;
    }
    //4.在pos位置上添加一个元素
    public void add(int pos,int key) throws CheckInAddException {
        //首先判断pos的合法性
        checkInAdd(pos);
        //检查数组是否为空？？？
        if(isEmpty()) {
            return ;
        }
        //如果满了就增容
        if(isFull()) {
            this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
        }
        //在pos位置上增加key这个元素
        for(int i =this.usedSize-1;i>=pos;--i) {
            this.elem[i+1] = this.elem[i];
        }
        this.elem[pos] = key;
        this.usedSize++;
    }
    // 判定是否包含某个元素
    public boolean contains(int toFind) {
        for(int i =0;i<this.usedSize;++i) {
            if(this.elem[i]==toFind) {
                return true;
            }
        }
        return false;
    }
    // 查找某个元素对应的位置
    public int indexOf(int toFind) {
        for(int i =0;i<this.usedSize;++i) {
            if(this.elem[i]==toFind) {
                return i;
            }
        }
        return -1;
    }
    //1.删除元素
    public void remove(int key) {
        //判断顺序表示否为空
        if(this.usedSize==0) {
            return;
        }
        //遍历数组找到数组中key元素的下标
        int index =0;
        int ret = indexOf(key);
        if(ret!=-1) {
            index =ret;
        }else {
            System.out.println("没有找到你要移除的元素！！！");
            return ;
        }
        //这个要删除的key元素的下标就是index
        for(int j =index;j<this.usedSize-1;++j) {
            this.elem[j] = this.elem[j+1];//往前挪动
        }
        this.usedSize--;//有效个数减一
    }
    // 获取 pos 位置的元素
    public int get(int pos) throws CheckInAddException {
        //首先判断pos的合法性
        checkInAdd(pos);
        //检查数组是否为空？？？
        if(isEmpty()) {
            System.out.println("数组为空这里返回-1");
            return -1;
        }
        return this.elem[pos];
    }
    // 给 pos 位置的元素设为 value
    public void set(int pos, int value) throws CheckInAddException {
        //首先判断pos的合法性
        checkInAdd(pos);
        //检查数组是否为空？？？
        if(isEmpty()) {
            System.out.println("数组为空");
           return;
        }
        this.elem[pos] = value;
    }
    // 获取顺序表长度
    public int size() {
        return this.usedSize;
    }
    // 清空顺序表
    public void clear() {
        this.usedSize=0;
    }

}

public class TestDemo {


    public static void main(String[] args) throws CheckInAddException {
        MyArray myArray = new MyArray();
        myArray.add(1);
        myArray.add(2);
        myArray.add(3);
        myArray.disPlay();
        System.out.println("============");
        myArray.remove(3);
        myArray.remove(2);
        myArray.remove(1);
        myArray.remove(100);
        System.out.println(myArray.get(0));
        System.out.println(myArray.get(1));
        System.out.println(myArray.get(2));
        myArray.set(0,999);
        myArray.set(1,999);
        myArray.set(2,999);
        myArray.disPlay();
        System.out.println("=================");
        myArray.clear();
        myArray.disPlay();
    }

    public static void main1(String[] args) throws CheckInAddException {
        MyArray myArray = new MyArray();
        //打印数组中的元素
        myArray.add(1);
        myArray.add(2);
        myArray.disPlay();
        System.out.println("=================");
        myArray.add(0,999);
        myArray.add(1,1999);
        myArray.add(2,2999);
        myArray.disPlay();
        System.out.println("===================");
        System.out.println(myArray.contains(9999));
        System.out.println(myArray.contains(999));
        System.out.println(myArray.contains(2999));
        System.out.println("===================");
        System.out.println(myArray.indexOf(999));
        System.out.println(myArray.indexOf(1));
        System.out.println(myArray.indexOf(0));

    }
//    public static List<Character> func(String s1,String s2) {
//        //遍历字符串s1看一看这个字符串当中的字母在字符串s2中有没有，
//        //如果s1当中的字符在s2中出现就不增加到数组中，如果s1字符没有在s2字符中出现那就增加
//        //到数组中
//        List<Character> arrayList = new ArrayList<>();
//        //遍历字符串1
//        for (int i = 0; i < s1.length(); i++) {
//            char ch = s1.charAt(i);
//            if(!s2.contains(ch+"")) {
//                arrayList.add(ch);
//            }
//        }
//      return arrayList;
//    }

//    public static void main(String[] args) {
//        String s1 = "welcome to bit";
//        String s2 = "come";
//        List<Character> arrayList1 = func(s1, s2);
//        for (Character ch: arrayList1) {
//            System.out.print(ch+" ");
//        }
//        //System.out.println(func(s1, s2));
//    }
}
